#ifndef utility_Iterator_h
#define utility_Iterator_h

namespace serika
{
	namespace ut
	{
		template<typename Item>
		class ReadOnlyIterator
		{
		public:
			ReadOnlyIterator() {}
			virtual ~ReadOnlyIterator() {}

		public:
			virtual bool HasNext() const = 0;
			virtual void Next() = 0;
			virtual const Item& GetCurrent() const = 0;
		};

		template<typename Item>
		class Iterator
		{
		public:
			Iterator() {}
			virtual ~Iterator() {}

		public:
			virtual bool HasNext() const = 0;
			virtual void Next() = 0;
			virtual Item& GetCurrent() const = 0;
		};
	}
}

#endif
